0.1 R Markdown

Ce fichier montre les rĆ©sultats des questions du TP disponible ici. J’ai choisi de ne pas afficher tout le temps le code R que j’ai Ć©crit pour rĆ©pondre aux questions. Les rĆ©sultats sont tous affichĆ©s dans le document. Le code R Markdown est disponible sur mon compte GitHub. J’ai utilisĆ© les donnĆ©es de Janvier 2020 pour les entreprises.

Ce TP consiste Ć  travailler sur des donnĆ©es de la base Sirene de l’INSEE, mise Ć  disposition sur data.gouv.fr, et qui rĆ©pertorie l’ensemble des entreprises et Ć©tablissements actifs en France. Les mĆ©tadonnĆ©es associĆ©es Ć  cette base sont en partie dĆ©crites dans ce tableau.


1 Mise en place

Pour réaliser ce TP, nous avons besoin de toutes les bibliothèques suivantes :

1.1 Installations, tƩlƩchargements, premiers tests sur le dƩpartement 42

  • TĆ©lĆ©chargez les donnĆ©es du dĆ©partement 42, geo_siret_42.csv dans ce rĆ©pertoire pour le mois de Janvier 2020 et dĆ©zippez le dossier sur votre machine.

  • TĆ©lĆ©chargez la table qui renseigne les codes correspondant Ć  l’ActivitĆ© Principale de l’Etablissement (APE)APE_Type.csv

1.2 Lecture de tableaux de donnƩes

  • Depuis RStudio, crĆ©ez un projet qui comprendra l’ensemble des donnĆ©es et documents nĆ©cessaires Ć  rĆ©aliser l’ensemble des traitements qui vous seront demandĆ©s pour ce TP.

  • CrĆ©ez le data.frame data42 en lisant la table geo-siret_42.csv.

  • CrĆ©ez l’objet APE_Type en lisant le fichier relatif aux codes d’APE.

1.3 Code et types d’activitĆ©s => commerces alimentaires

  • Combien d’entreprises ont un nom (enseigne1Etablissement) qui comprend le terme ā€œBOULANGERIEā€?
Il y a

entreprises qui comprennent le terme ā€œBOULANGERIEā€ dans leur nom.

  • Ajoutez une variable Code Ć  votre table en ne conservant que les quatre premiers caractĆØres de la variable activitePrincipaleEtablissement (cela correspond Ć  un pattern ā€œ^….ā€, Ć  savoir le dĆ©but de chaĆ®ne de caractĆØre suivi de quatre caractĆØres quelconques -cf ce billet de blog sur les expressions rĆ©guliĆØres-).
  • Filtrez les lignes de data42 pour ne retenir que celles pour lesquelles l’APE correspond aux commerces ā€œalimentairesā€ -alimentation, boisson, restaurant, bar- (voir la liste contenue dans le fichier APE_Type).

  • Stockez le rĆ©sultat de ces opĆ©rations dans un objet alim42.

  • RĆ©alisez une jointure entre data42_alim (variable codeAPE) et APE_Type (variable Code), de maniĆØre Ć  complĆ©ter alim42 avec les types de commerces (variables Type et TypeAbreg).

1.4 RƩsumƩ, classement

  • Quelles sont les 3 communes de votre base de donnĆ©es qui comptent le plus de magasins alimentaires?

Les trois communes comptant le plus de commerces alimentaires sont : SAINT-ETIENNE, ROANNE, SAINT-CHAMOND

  • Pour les communes qui ne comptent qu’un seul commerce ā€œalimentaireā€, de quel type est-il, le plus frĆ©quemment?

Les communes ne comptant qu’un seul commerce ā€œalimentaireā€ sont au nombre de 17. Avec en dĆ©tail : BOYER, CEZAY, LA CHAPELLE-EN-LAFAYE, DEBATS RIVIERE D’ORPRA, GREZIEUX-LE-FROMENTAL, JARNOSSE, LURE, PINAY, ROCHE, SAINTE-AGATHE-EN-DONZY, SAINT-LAURENT-ROCHEFORT, SAINT-PIERRE-LA-NOAILLE, SAINT-PRIEST-LA-VETRE, SAINT-SIXTE, SAINT-THOMAS-LA-GARDE, SOUTERNON, URBISE

Lorsqu’il y a un seul commerce alimentaire dans une commune, celui-ci est de type Restaurants et services de restauration mobile.

  • Quelles communes de plus de 100 commerces comptent au moins 10 commerces de type ā€œviandeā€?

Les communes de plus de 100 commerces sont ANDREZIEUX-BOUTHEON, LE CHAMBON-FEUGEROLLES, CHARLIEU, CHAZELLES-SUR-LYON, LE COTEAU, FEURS, FIRMINY, MONTBRISON, LA RICAMARIE, RIVE-DE-GIER, ROANNE, ROCHE-LA-MOLIERE, SAINT-CHAMOND, SAINT-ETIENNE, SAINT-PRIEST-EN-JAREZ, SAINT-JUST-SAINT-RAMBERT, LA TALAUDIERE

Les communes qui ont plus de 10 commerces de type ā€˜viande’ sont FEURS, MONTBRISON, ROANNE, SAINT-ETIENNE, LA TALAUDIERE

On retrouve les 5 communes ayant plus de 10 commerces de type ā€˜viande’ dans les villes ayant plus de 100 commerces. On a donc la rĆ©ponse. Mais pour s’assurer, on peut rĆ©aliser une jointure entre les 2 tableaux :

On retrouve le même résultat : FEURS, MONTBRISON, ROANNE, SAINT-ETIENNE, LA TALAUDIERE


2 Rapport, statistiques descriptives

A ce stade, votre script commence Ć  ĆŖtre un peu long et (peut-ĆŖtre) un peu dĆ©sordonné… Ne serait-ce pas plus agrĆ©able de continuer votre projet sous la forme d’un rapport Rmarkdown? (Ne rĆ©pondez pas Ć  cette question, elle est rhĆ©torique…).

CrĆ©ez un document ____.Rmd, structurez-le avec quelques titres, et rĆ©partissez les diffĆ©rents morceaux de code de votre script de maniĆØre pertinente dans diffĆ©rents chunks. Vous pouvez maintenant rĆ©diger des paragraphes en y intĆ©grant des Ć©lĆ©ments de rĆ©ponses aux questions posĆ©es prĆ©cĆ©demment. RĆ©digez un petit paragraphe pour nommer les 3 communes qui comptent le plus d’entreprises (exercice prĆ©cĆ©dent) en utilisant l’insertion dā€™ā€œinline chunksā€.

Les 3 communes qui comptent le plus d’entreprises sont SAINT-ETIENNE, ROANNE, SAINT-CHAMOND.

A partir de maintenant, votre document de travail sera un document`___.Rmd’ et non le script que vous avez crƩƩ initialement…


3 Programmation: automatisation pour plusieurs dƩpartements

3.1 Fonction

Pour obtenir la table alim42, vous avez rĆ©alisĆ© un certain nombre d’opĆ©rations. On voudrait rĆ©aliser l’ensemble de ces opĆ©rations pour les 5 dĆ©partements suivants:

  • l’Ain (01)
  • l’IsĆØre (38)
  • la Loire (42)
  • la Haute-Loire (43)
  • le RhĆ“ne (69)

RĆ©utilisez les commandes que vous avez mises au point sur data42 pour Ć©crire une fonction get_clean_data() qui rĆ©alisera l’ensemble de ces opĆ©rations sur le dĆ©partement de votre choix. L’input correspondra Ć  un numĆ©ro de dĆ©partement (c’est-Ć -dire que vous pourrez utiliser la fonction en faisant, par exemple get_clean_data(ā€œ01ā€)).

Pour lire le fichier, il faudra indiquer son chemin… Pensez Ć  rĆ©utiliser ce que vous venez d’apprendre sur les chaĆ®nes de caractĆØres pour reformer le chemin du fichier que vous intĆ©resse Ć  partir du numĆ©ro de dĆ©partement…

Certaines chaĆ®nes de caractĆØre sont interprĆ©tĆ©es comme des chaĆ®nes de caractĆØre pour certains jeux de donnĆ©es (par exemple pour les codes postaux de l’Ain, Ć  cause du ā€œ0ā€ en dĆ©but de chaĆ®ne) tandis qu’elle est interprĆ©tĆ©e comme un numĆ©rique pour les autres jeux de donnĆ©es. Faites en sorte que votre fonction transforme bien cette variable pour qu’elles soient toujours de classe ā€œcharacterā€ en sortie (conversion par as.character()…).

3.2 ItƩration

  • Appelez cette fonction de maniĆØre itĆ©rative pour chacun des dĆ©partements citĆ©s ci-dessus. Vous pouvez pour ce faire soit Ć©crire une boucle for, soit utiliser la fonction map() du package purrr.

A partir des 5 jeux de donnĆ©es obtenus vous crĆ©erez un seul et mĆŖme jeu de donnĆ©es alimRA_entr (donnĆ©es pour l’ancienne rĆ©gion RhĆ“ne-Alpes, où 1 ligne=1 entreprise).

  • Vous pourrez si vous le souhaitez vous servir de la commande do.call(ā€œrbindā€,…) ou bind_rows().

  • Rajoutez une variable departement (correspondant au numĆ©ro de dĆ©partement) Ć  votre jeu de donnĆ©es alimRA_entr. Peut-ĆŖtre par des manipulations sur le code postal?…

3.3 If et Ʃcriture de fichier

Vous avez dĆ» remarquer que l’exĆ©cution de l’étape prĆ©cĆ©dente prenait un peu de temps car les 5 fichiers geo-sirene lus sont trĆØs volumineux… En revanche la table alimRA_entr est de taille beaucoup plus raisonnable. Or, nous n’aurons besoin que de cette table pour la suite du projet. Pour Ć©viter d’exĆ©cuter cette Ć©tape chronophage Ć  chaque fois que vous travaillerez sur ce projet:

  • exportez alimRA_entr dans un fichier alimRA_entr.csv.
  • entourez la boucle for d’une structure conditionnelle if de sorte que la boucle ne soit exĆ©cutĆ©e que si le fichier alimRA_entr.csv n’existe pas (voir fonction file.exists()…)
  • Ć©crivez Ć  la suite la commande qui servira Ć  lire alimRA_entr.csv Ć  chaque ā€œtricotageā€ de votre rapport Rmarkdown.

4 RƩsumƩ par commune et type de commerce

4.1 AgrƩgation des donnƩes par commune et type de commerce

Agrégez la table alimRA_entr par commune et type de commerce, pour créer une table alimRA_typeCom (où une ligne correspondra à un type de commerce pour une commune):

  • une variable nInCom correspondant au nombre de commerces par commune
  • une variable nInTypeCom correspondant au nombre de commerces par type et commune
  • une variable propInTypeCom correspondant Ć  la proportion d’un type de commerce dans une commune

Quelles communes comptant plus de 100 commerces comptes au moins 5% de commerces de type ā€œviandeā€?

Les communes comptant plus de 100 commerces, dont les commerces de type ā€˜bar’ reprĆ©sentent au moins 15% des commerces sont TREVOUX, BEAUREPAIRE, ROUSSILLON, SAINT-MARCELLIN, CHAMROUSSE, CHARLIEU, FIRMINY, ROANNE, BRIOUDE, LANGEAC, THIZY-LES-BOURGS.

Les communes comptant plus de 100 commerces, dont les commerces de type ā€˜viande’ reprĆ©sentent au moins 5% des commerces sont CHARLIEU, FEURS, MONTBRISON, LA TALAUDIERE, YSSINGEAUX, CORBAS.

4.2 Graphique

  • RĆ©alisez un graphique montrant les proportions des diffĆ©rents types de commerces pour LYON 4EME et LYON 8EME.


5 Evolution dans le temps des crĆ©ations d’entreprise

5.1 Manipuler des dates avec lubridate

Nous allons nous intƩresser aux dates de crƩation des entreprises de notre base alimRA_entr (variable dateCreationEtablissement).

Pour le moment, dateCreationEtablissement est considĆ©rĆ© comme une variable de type ā€œchaĆ®ne de caractĆØresā€. Pour faire comprendre Ć  R qu’il s’agit en rĆ©alitĆ© d’une date (et lui faire comprendre comment elle est mise en forme) nous allons faire appel au package lubridate.

  • Installez et chargez le package lubridate.

  • Transformez le tableau alimRA_entr en modifiant la classe de dateCreationEtablissement Ć  l’aide d’une fonction de lubridate.

  • Ajoutez une variable annee au tableau alimRA_entr Ć  l’aide, Ć  nouveau, d’une des fonctions de lubridate.

5.2 RƩsumƩ, filtre

  • CrĆ©ez une table alimRA_typeAn qui recense le nombre d’entreprises par annĆ©e (nInAn), et par type*annĆ©e (nInTypeAn).

  • Filtrez les donnĆ©es de alimRA_typeAn pour ne garder que les entreprises dont la crĆ©ation correspond aux annĆ©es >=1970.

5.3 Graphiques: Ć©volution du nombre d’entreprises au cours du temps

  • Installez et chargez le package ggplot2
  • RĆ©alisez un graphique reprĆ©sentant l’évolution des proportions d’entreprises (par type) par annĆ©e.

On peut aussi sƩparer les types de commerce et crƩer une grille avec un graphique pour chaque type :

  • RĆ©alisez ce mĆŖme graphique, mais en reprĆ©sentant le nombre de crĆ©ations d’entreprises par annĆ©e et par type, pour les 5 types comptant le plus de crĆ©ations d’entreprises (au total).


6 Cartes

6.1 Carte des boulangeries-pâtisseries

  • Repartez de la table alim_entr pour en faire un objet de classe ā€œsfā€. Vous vous servirez pour cela des colonnes ā€œlongitudeā€ et ā€œlatitudeā€ et exclurez les entreprises pour lesquelles ces colonnes ne sont pas renseignĆ©es.

  • RĆ©alisez une carte montrant le semis de points correspondant aux boulangeries-pĆ¢tisseries.

  • Essayez de reprĆ©senter Ć  travers cette carte l’annĆ©e de crĆ©ation de l’entreprise (de la maniĆØre qui vous semblera la plus pertinente).

6.2 Carte des proportions de commerce par commune

  • TĆ©lĆ©chargez le shapefile des limites de communes en France et filtrez pour ne garder que les dĆ©partements considĆ©rĆ©s ci-dessus.

On crĆ©e une fonction pour afficher les commerces d’un dĆ©partement

On peut afficher les boulangeries-pâtisseries avec leur année de création, par département :

## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

On affiche maintenant les dĆ©partements de l’étude Ć  partir du fichier SHP rĆ©cupĆ©rĆ© prĆ©cĆ©demment :

  • Joignez aux communes les informations concernant les commerces (st_join()…) et calculez le nombre de commerces par commune.

  • Produisez une carte montrant le nombre de commerces par commune. Vous aurez sans doute Ć  retravailler l’échelle colorĆ©e…

On crĆ©e une fonction pour afficher le nombre de commerces par commune d’un dĆ©partement.

Puis on affiche les rƩsultats :

## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]